草庐IT

指向类的 C++ 指针

全部标签

windows - 为导致崩溃的非静态函数指针赋值 - 为什么?

我有一个定义如下的函数:typedefvoid(*logprintf_t)(constchar*format,...);logprintf_tlogprintfvoidmy_function(){logprintf=cast(logprintf_t)0x12345;}它会导致应用程序退出。但是,如果我将logprintf设为静态(我在某处看到过这个技巧),即:voidmy_function(){staticlogprint_tlogprintf=cast(logprintf_t)0x12345;}它不会崩溃。这是语言规则还是某种错误?为什么dmd不警告这个?

c++ - 使用指针创建对象访问冲突错误

所以我刚开始使用C++进行Windows编程。首先我画了一些线,没问题,然后我尝试创建一个类来绘制一些形状,当我使用普通方法创建对象时它工作正常(在代码中这些部分被注释掉),但是当我使用指针创建新对象时,出现了Accessviolation错误。这是我的类(class)(我删除了一些代码,因此在某些部分看起来过于简单):classshapes{public:shapes(void);voidsetstartp(POINT&p0);voidsetendp(POINT&p1);voiddraw(HDChdc);~shapes(void);POINTx0;POINTx1;};shapes::

c++ - 使用 GetModuleHandle 获取指向 IMAGE_DOS_HEADER 的指针?

一旦我的进程加载到内存中,我就试图获取它的图像库。据我了解,您可以调用GetModuleHandle来获取图像库。我的问题是,返回的句柄是否实质上指向IMAGE_DOS_HEADER结构,以便您可以执行以下操作:PIMAGE_DOS_HEADERDosHeader;DosHeader=(PIMAGE_DOS_HEADER)GetModuleHandle(NULL);如果这不正确,您还可以使用什么其他方法? 最佳答案 这是正确的,但如果您想要dll的模块句柄,则需要指定其路径。否则,您将获得进程exe的句柄。您还应该首先检查返回的HM

java - SpringSource Tool Suite windows 7 32 位安装程序指向错误的 JRE

我正在尝试在windows732位机器上安装SpringSourceToolSuite并遇到一个问题,springsource工具套件安装程序.exe文件正在寻找旧的jre而不是新的jdk,我如何让安装程序指向新的jdk而不是老jre?这是收到的错误消息:TheRegistryreferstononexistentJavaRuntimeEnvironmentinstallatioorruntimeiscorrupt.Thesystemcannotfindthepathspecified.有什么建议吗? 最佳答案 我遇到了类似的问题。

c# - 检测路径是否指向 NTFS 分区

给定绝对文件系统路径,我如何检测它是否在NTFS分区上?我更喜欢C#的帮助,但Win32/C会做。软件运行的系统为WindowsVista或更高版本。 最佳答案 //Getallthedrivesonthelocalmachine.DriveInfo[]allDrives=DriveInfo.GetDrives();//Getthepathroot.varpathRoot=Path.GetPathRoot(absoluteFilePath);//Findthedrivebasedonthepathroot.vardriveBased

c - 赋值从整数生成指针而不进行强制转换

当我尝试编译以下代码时:#defineBUFSIZEMAX_PATH//....TCHARsz_VolumeName[BUFSIZE];//11HANDLEhSearch;//12hSearch=FindFirstVolume(sz_VolumeName,BUFSIZE);//13它给了我错误:[Warning]assignmentmakespointerfromintegerwithoutacast-第13行的问题这里出了什么问题?编辑:例如:#include#include#include#include#defineBUFSIZEMAX_PATHintmain(intargc,c

python - 将 Vim 指向更新的 Python 版本而不是重新编译

我正在开始我的Vim之旅,但在尝试将它变成我的主要PythonIDE时遇到了障碍。除了python模式插件之外,我还在使用Vimv7.4(最新)。问题是虽然这个版本的Vim是用+python/dyn和+python3/dyn编译的,但它指向python32.dll而不是python34.dll。我使用:version命令看到了所有这些。有没有一种方法可以将Vim定位到较新版本的Python,而无需在每次更新时都重新编译它? 最佳答案 您可以尝试将python34.dll重命名/符号链接(symboliclink)到python32.

windows - Windbg 将指针视为有符号整数

structNode{structNodeYNY;intdata;};当我这样做时,对于该结构的实例指针“N”2:kd>?poi(poi(N))Evaluateexpression:-70368698399456=ffffc000`02ba8520基本上我想用这样的东西bpigdkmd64!KmRender+0x199".if(@@(N)>0x1){}.else{gc}"因此,大多数情况下它是正确的,但由于windbg将其视为有符号整数,上述条件断点始终为假,因为@@(N)始终计算为负数。如何比较2个内存地址的数量? 最佳答案 kd

windows - 是否值得在 QueryInterface() 实现中检查空指针?

IUnknown::QueryInterface()被传递了一个void**参数,表示放置检索到的接口(interface)的地址。STDMETHODQueryInterface(/*[in]*/REFIIDriid,/*[iid_is][out]*/void**ppvObject)QueryInterface()的实现应该检查这个指针是否为空(然后立即返回E_POINTER)还是只写在那里?我看过很多与COM相关的代码,几乎所有地方都没有执行任何检查。假设有人当然可以传递空指针作为这个参数,但真的需要这样的检查吗? 最佳答案 您(

c++ - 如何查看指针映射中的指针是否不为 0

我制作了一张map,我需要在另一个线程中使用该map,所以我制作了一个指向我的map的指针并将其发送到另一个线程。但是,当我想查看映射中的值是否不为NULL(指针)时,我得到了一个错误。这是一个示例代码:#include#include#includeusingnamespacestd;intmain(){inttest=1;maphandle;map*handle2;handle[0]=&test;handle2=&handle;if(*handle2[0]){cout这是我得到的错误:错误C2451:'std::map'类型的条件表达式是非法的在这种情况下,我如何欺骗0指针?